const path = requeire('path')
const grpc = require('@grpc/grpc-js')
const protoLoader = require('@grpc/proto-loader')

//构建message.proto的完整路径,_dirname是node.js中的一个全局变量,表示当前执行脚本所在的目录
const PROTO_PATH = path.join(__dirname, 'message');

/*
使用protoLoader.loadSync方法同步加载.proto文件，并传入一个配置对象。
这个配置对象指定了如何处理加载的.proto文件中的不同类型
keepCase: true：保留字段名的原始大小写,如果为 false，则将所有字段名转换为驼峰命名法。
longs: String：将长整型作为字符串处理。
enums: String：将枚举类型作为字符串处理。
defaults: true：为消息字段提供默认值。
oneofs: true：支持oneof字段（一种特殊的字段，其中只有一个字段可以被设置）
*/
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
    keepCase: true, longs: String, enums: String, defaults: true, oneofs: true
})

//使用grpc.loadPackageDefinition方法将加载的.proto文件转换为gRPC服务定义
const protoDescriptor = grpc.loadPackageDefinition(packageDefinition)

//从protoDescriptor中获取名为message的服务
const message_proto = protoDescriptor.message

//导出message_proto，使其可以在其他JavaScript文件中被引入和使用
module.exports = message_proto

